// 引入axios
import axios from "axios";

import { ElMessage } from 'element-plus'
// 请求超时时间
axios.defaults.timeout = 30000;
// axios.defaults.baseURL = Object.is(process.env.NODE_ENV, 'production') ? process.env.VUE_APP_API_URL : '/api';
axios.defaults.baseURL = 'api';

// 请求拦截器
axios.interceptors.request.use(
    (config) => {
        // 每次发送请求之前判断是否存在token，如果存在，则统一在http请求的header都加上token，不用每次请求都手动添加了
        // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断

        const token = localStorage.getItem("Token");
        config.headers["Authorization"] = token
        // console.log(config)
        return config;
    },
    (error) => {
        return Promise.error(error);
    }
);
// 响应拦截器
axios.interceptors.response.use(
    (response) => {
        console.log(response)
        try {
            if (response.status === 200) {
                // return Promise.resolve(response);
                if (response.data && response.data.code === 0) {
                    return Promise.resolve(response);
                } else if(response.data && response.data.code === 401){
                    ElMessage.error(response.data.msg)
                    localStorage.removeItem("Token");
                    localStorage.removeItem("menus");
                    sessionStorage.removeItem("editable");
                    window.location.pathname = '/LoginPage'

                } else {
                    // console.log(response.data.msg)
                    ElMessage.error(response.data.msg)
                    return Promise.reject(response);
                }
            } else {
                ElMessage.error(response.data.msg)
                return Promise.reject(response);
            }
        } catch (error) {
            return Promise.reject(error);
        }

    },
    // 服务器状态码不是200的情况
    (error) => {
        if (error.response.status) {

            switch (error.response.status) {
                case 401:
                    if (confirm("请先登录！")) {
                        console.log(11)
                    }
                    break;
                case 500:
                    alert("网错错误，请稍后再试！");
                    break;
                case 404:
                    alert("网错错误，请稍后再试！");
                    break;
                default:
                    alert(error.response.data.msg + "！");
            }
            return Promise.reject(error.response);
        }
    }
);

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params) {
    return new Promise((resolve, reject) => {
        axios
            .get(url, {
                params: params,
            })
            .then((res) => {
                resolve(res.data);
            })
            .catch((err) => {
                reject(err.data);
            });
    });
}
/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post(url, params) {
    return new Promise((resolve, reject) => {
        axios
            .post(url, params)
            .then((res) => {
                resolve(res.data);
            })
            .catch((err) => {
                reject(err.data);
            });
    });
}
